﻿CREATE PROCEDURE [dbo].[RepriceLinesDelete] --переоценка товара
(
	@Original_Id int,				--код строки в таблице списания/переоценки 
	@Original_MD datetime
)
AS
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int, @intRowCount int
DECLARE @intNLId int, @intOLId int, @intQntty int, @intDocId int, @datDocDate smalldatetime, @intNewPartyId int
DECLARE @intInputCount int, @intOutputCount int
SET NOCOUNT ON

IF (@Original_Id Is Null) OR (@Original_MD Is Null) 
BEGIN
	SELECT @intErrCode = 1, @strMsg = 'Неправильные параметры в вызове процедуры ' + Object_Name(@@Procid) + ' !'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

SELECT @intOLId = OLId, @intNLId = NLId, @intQntty = Qntty, @intDocId = DocId,
@intNewPartyId = NewPartyId
FROM dbo.vwRepriceLines WHERE Id = @Original_Id AND MD = @Original_MD
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 2, 
	@strMsg = 'Данные изменены после последнего запроса!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF EXISTS (
	SELECT TOP (1) Id FROM CA.GoodsDocLines WHERE PartyId = @intNewPartyId AND Id <> @intNLId
)
BEGIN
	SELECT @intErrCode = 3, 
	@strMsg = 'По партии с новой ценой было товародвижение!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

SELECT @datDocDate = DocDate FROM CA.Documents WHERE Id = @intDocId
-- проверка товародвижения
SET @intRet = 0 - @intQntty
EXEC @intRet = dbo.CheckPartyFlow @intNewPartyId, @intQntty, @datDocDate, @intInputCount OUTPUT, @intOutputCount OUTPUT
IF @intRet <> 0 RETURN @intRet

BEGIN TRAN
--удаление строки переоценки
DELETE FROM CD.RepriceWriteoffLines WHERE Id = @Original_Id

SELECT @intErrCode = @@error, @intRowCount = @@rowcount
IF @intErrCode <> 0 
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	RETURN @intErrCode
END
IF (@intRowCount <> 1)
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	SELECT @intErrCode = 4, 
	@strMsg = 'Запись из таблицы списания/переоценки не удалена!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

--удаление прихода по новой партии
DELETE [CA].[GoodsDocLines] WHERE Id = @intNLId;
SELECT @intErrCode = @@error, @intRowCount = @@rowcount
IF @intErrCode <> 0 
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	RETURN @intErrCode
END
IF (@intRowCount <> 1)
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	SELECT @intErrCode = 5, 
	@strMsg = 'Запись по новой партии из таблицы товародвижения не удалена!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

--удаление новой партии 
DELETE CD.Parties WHERE Id = @intNewPartyId

SELECT @intErrCode = @@error, @intRowCount = @@rowcount
IF @intErrCode <> 0 
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	RETURN @intErrCode
END
IF (@intRowCount <> 1)
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	SELECT @intErrCode = 6, 
	@strMsg = 'Новая партии не удалена!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

	SET NOCOUNT OFF;
--удаление расхода по исходной партии
DELETE [CA].[GoodsDocLines] WHERE Id = @intOLId

SELECT @intErrCode = @@error, @intRowCount = @@rowcount

	SET NOCOUNT ON;
IF @intErrCode <> 0 
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	RETURN @intErrCode
END
IF (@intRowCount <> 1)
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	SELECT @intErrCode = 7, 
	@strMsg = 'Запись по исходной партии из таблицы товародвижения не удалена!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

COMMIT TRAN

RETURN 0


















